package com.zwz.control;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zwz.bean.AdminInfo;
import com.zwz.control.util.R;
import com.zwz.service.AdminInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class AdminInfoControl {

    @Autowired
    private AdminInfoService adminInfoService;

    /**
     * 接收get请求，从数据库中取出id对应的管理员信息
     * @param aid 管理员信息id
     * @return
     */
    @GetMapping("/show/{aid}")
    public R getIdToShow(@PathVariable Integer aid){
        return new R(true,adminInfoService.getById(aid));
    }

    /**
     * 接收delete请求，删除对应id的管理员信息
     * @param aid
     * @return
     */
    @DeleteMapping("/delete/{aid}")
    public R delete(@PathVariable Integer aid){
        boolean flag = adminInfoService.deleteById(aid);
        return new R(flag, flag ? "删除成功" : "删除失败");
    }

    /**
     * 接收post请求，将传入的管理员信息存入数据库
     * @RequestBody 接收的数据为JSON数据
     * @param adminInfo
     * @return
     */
    @PostMapping("/insert")
    public R save(@RequestBody AdminInfo adminInfo){
        boolean flag = adminInfoService.insert(adminInfo);
        return new R(flag, flag ? "添加成功" : "添加失败");
    }

    /**
     * 分页查询，接收get请求，
     * @param currentPage 当前页码
     * @param pageSize 每页数据条数
     * @param adminInfo 管理员信息，用于查询，可以为空，为空不拼接SQL语句
     * @return
     */
    @GetMapping("/page/{currentPage}/{pageSize}")
    public R getPage(@PathVariable int currentPage, @PathVariable int pageSize, AdminInfo adminInfo) {
        IPage<AdminInfo> page = adminInfoService.getPage(currentPage, pageSize, adminInfo);
        // 如果当前页面值大于总页码值，那么重新执行查询操作，使用最大页码值作为当前页码值
        if (currentPage > page.getPages()) {
            page = adminInfoService.getPage((int) page.getPages(), pageSize, adminInfo);
        }
        return new R(true, page);
    }

    /**
     * 接收更新请求，更新数据库中的数据
     * @param adminInfo 从前端传入的JSON，需要使用@RequestBody
     * @return
     */
    @PutMapping("/update")
    public R updateInfo(@RequestBody AdminInfo adminInfo) {
        boolean flag = adminInfoService.updateById(adminInfo);
        return new R(flag, flag ? "修改成功^_^" : "修改失败-_-!");
    }

    /**
     * 用于统计数据库中管理员信息总数
     * @return
     */
    @GetMapping("/count")
    public R countAll(){
        int count = adminInfoService.countAll();
        return new R(true,count);
    }

    /**
     * 管理员自行修改个人信息
     * @param adminInfo 前端传入的数据
     * @return
     */
    @PutMapping("/admin-update")
    public R userInfoUpdate(@RequestBody AdminInfo adminInfo){
        boolean flag = adminInfoService.adminUpdateInfo(adminInfo);
        return new R(flag, flag ? "修改成功^_^" : "修改失败-_-!");
    }


    /**
     * 接收get请求，从数据库中取出id对应的管理员信息
     * @param id 管理员信息id
     * @return
     */
    @GetMapping("/admin-show/{id}")
    public R userShow(@PathVariable Integer id){
        return new R(true,adminInfoService.adminShow(id));
    }


}
